package com.xuzz.study.basic;

/**
 * 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法，但是可以有多个非抽象方法的接口。 *
 * 函数式接口可以被隐式转换为 lambda 表达式。
 *
 * 在spring-cloud 的Ribbon中对RestTemplate添加负载功能，就用到了函数式接口:
 *
 * @Bean
 *        public SmartInitializingSingleton loadBalancedRestTemplateInitializerDeprecated(final ObjectProvider<List<RestTemplateCustomizer>> restTemplateCustomizers) {
 * 		return () -> restTemplateCustomizers.ifAvailable(customizers -> {
 * 			for (RestTemplate restTemplate : LoadBalancerAutoConfiguration.this.restTemplates) {
 * 				for (RestTemplateCustomizer customizer : customizers) {
 * 					customizer.customize(restTemplate);
 *                }
 *            }
 *        });
 *    }
 *
 *    @Bean
 *                @ConditionalOnMissingBean
 *        public RestTemplateCustomizer restTemplateCustomizer(final LoadBalancerInterceptor loadBalancerInterceptor) {
 * 			return restTemplate -> {
 * 				List<ClientHttpRequestInterceptor> list = new ArrayList<>(restTemplate.getInterceptors());
 * 				list.add(loadBalancerInterceptor);
 * 				restTemplate.setInterceptors(list);
 *            };
 *        }
 *
 *       如上：SmartInitializingSingleton和RestTemplateCustomizer都是函数式接口
 */

/**
 * @description:
 * @author: xuzz
 * @create: 2020-02-27 17:01
 */
public interface MyFunctionInterface {
    void say(String message);
}
